package com.dkd.manage.service.impl;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import com.dkd.common.utils.DateUtils;
import com.dkd.common.utils.SecurityUtils;
import com.dkd.manage.domain.vo.NodeVo;
import com.dkd.manage.domain.vo.PartnerVo;
import com.dkd.manage.mapper.NodeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dkd.manage.mapper.PartnerMapper;
import com.dkd.manage.domain.Partner;
import com.dkd.manage.service.IPartnerService;
import org.springframework.transaction.annotation.Transactional;

import static com.dkd.common.constant.DkdContants.IS_DELETED;

/**
 * 合作商管理Service业务层处理
 *
 * @author yjx
 * @date 2025-07-12
 */
@Service
public class PartnerServiceImpl implements IPartnerService {
    @Autowired
    private PartnerMapper partnerMapper;

    @Autowired
    private NodeMapper nodeMapper;

    /**
     * 查询合作商管理
     *
     * @param id 合作商管理主键
     * @return 合作商管理
     */
    @Override
    public Partner selectPartnerById(Long id) {
        return partnerMapper.selectPartnerById(id);
    }

    /**
     * 查询合作商管理列表
     *
     * @param partner 合作商管理
     * @return
     */
    @Override
    public List<Partner> selectPartnerList(Partner partner) {
        return partnerMapper.selectPartnerList(partner);
    }

    /**
     * 查询合作商管理列表
     *
     * @param partner 合作商管理
     * @return 合作商管理
     */
    @Override
    public List<PartnerVo> selectPartnerVoList(Partner partner) {
        return partnerMapper.selectPartnerVoList(partner);
    }

    /**
     * 查询所有合作商下的点位和区域
     */
    @Override
    public List<NodeVo> selectNodeVoByPartnerId(Long partnerId) {
        return nodeMapper.selectNodeVoByPartnerId(partnerId);
    }

    /**
     * 新增合作商管理
     *
     * @param partner 合作商管理
     * @return 结果
     */
    @Override
    public int insertPartner(Partner partner) {
        partner.setCreateTime(DateUtils.getNowDate());

        // 对密码进行加密 ruoyi内置加密
        partner.setPassword(SecurityUtils.encryptPassword(partner.getPassword()));

        return partnerMapper.insertPartner(partner);
    }

    /**
     * 修改合作商管理
     *
     * @param partner 合作商管理
     * @return 结果
     */
    @Override
    public int updatePartner(Partner partner) {
        partner.setUpdateTime(DateUtils.getNowDate());

        // 获取原始实体信息
        Partner originalPartner = partnerMapper.selectPartnerById(partner.getId());

        // 如果新密码为空或未更改，则保留原来的加密密码
        if (partner.getPassword() == null || partner.getPassword().isEmpty()) {
            partner.setPassword(originalPartner.getPassword());
        } else {
            // 否则对新密码进行加密
            partner.setPassword(SecurityUtils.encryptPassword(partner.getPassword()));
        }

        return partnerMapper.updatePartner(partner);
    }

    /**
     * 批量删除合作商管理
     *
     * @param ids 需要删除的合作商管理主键
     * @return 结果
     */

    @Override
    public int deletePartnerByIds(List<Long> ids) {
        // 将partner逻辑删除
        ids.forEach(id -> {
            Partner partner = partnerMapper.selectPartnerById(id);
            partner.setIsDeleted(IS_DELETED);
            partnerMapper.updatePartner(partner);
        });
        return ids.size();
    }

    /**
     * 删除合作商管理信息
     *
     * @param id 合作商管理主键
     * @return 结果
     */
    @Override
    public int deletePartnerById(Long id) {
        return partnerMapper.deletePartnerById(id);
    }
}
